<?php

class CriteriuFormBeneficiar extends CriteriuForm
{
    // denumirea campului din formular in care se completeaza valoarea de repartizat
    const APARTAMENT_VALUE = 'value';
    // denumirea campului din formular care contine ID-ul apartamentului
    const APARTAMENT_ID = 'id';

    const ROW = '{row}';

    public function configure()
    {
        // Acest formular este constituit din mai multe subformulare, fiecare continand 2 campuri.
        // Pentru afisarea formularului este nevoie sa adaug un subformular temporar,
        //      folosit pentru generarea altor subformulare
        $this->embedForm(self::ROW, new CriteriuSubFormBeneficiar());

    }

    public function save(array $values, $cheltuialaId)
    {
        // transform $values
        $transform = array();
        foreach ($values as $element)
        {
            $transform[$element[self::APARTAMENT_ID]] = $element[self::APARTAMENT_VALUE];
        }

        parent::save($transform, $cheltuialaId);
    }

    protected function _prepareFormSchema(array $taintedValues)
    {
        // subformularul temporar este eliminat
        $this->delete(array(self::ROW));

        // add more fields (embedd subforms)
        foreach ($taintedValues as $index => $values)
        {
            $this->embedForm($index, new CriteriuSubFormBeneficiar());
        }

    }

    /**
     * @return string Valoarea atributului 'name' al campului APARTAMENT_ID
     */
    public function getIdFieldName()
    {
        return $this[self::ROW][self::APARTAMENT_ID]->renderName();
    }

    /**
     * @return string Valoarea atributului 'name' al campului APARTAMENT_VALUE
     */
    public function getValueFieldName()
    {
        return $this[self::ROW][self::APARTAMENT_VALUE]->renderName();
    }

}

class CriteriuSubFormBeneficiar extends BaseForm
{
    const APARTAMENT_VALUE   = CriteriuFormBeneficiar::APARTAMENT_VALUE;
    const APARTAMENT_ID      = CriteriuFormBeneficiar::APARTAMENT_ID;

    public function configure()
    {
        $this->setWidgets(array(
            self::APARTAMENT_VALUE   => new sfWidgetFormInputText(),
            self::APARTAMENT_ID      => new sfWidgetFormInputHidden(),
        ));

        $this->setValidators(array(
            self::APARTAMENT_VALUE   => new sfValidatorNumber(array(
                'min'   => -999999,
                'max'   => 999999,
            )),
            self::APARTAMENT_ID      => new sfValidatorPass(array('required' => true)),
        ));
    }

}
